const Router = require('koa-router')
let router = new Router()

// 28:
const mongoose = require('mongoose');

router.get('/', async(ctx)=>{
  ctx.body= '这是用户操作首页'
})

// 注册
router.post('/register', async(ctx)=>{
  console.log(ctx.request.body)
  // ctx.body = ctx.request.body
  // 28： 接收了前端传过来的数据，然后这里调用mongoose，开始去存储数据
  // 去的model
  const User= mongoose.model('User')
  //把从前端接收的POST数据封装成一个新的user对象
  let newUser = new User(ctx.request.body) //ctx.request.body 是一个对象，我这里开始存储
  //用mongoose的save方法直接存储，然后判断是否成功，返回相应的结果
  await newUser.save().then(()=>{
    // 成功返回code=200,并返回成功信息
    ctx.body={
      code:200,
      message:'注册成功'
    }
  }).catch(err=>{
    // 失败返回code=500，并返回错误信息
    ctx.body={
      code:500,
      message:err
    }
  })
})

// 登录的实践
router.post('/login',async(ctx)=>{
  // 得到前端传递过来的数据
  let loginUser= ctx.request.body;
  let userName=loginUser.userName;
  let password=loginUser.password;

  // 引入User的model
  const User=mongoose.model('User');

  // 查找用户名是否存在，如果存在开始对比密码
  await User.findOne({userName:userName}).exec().then(async(result)=>{
    // console.log(result,'API user.js');
    if(result){
      // console.log('进来的result')
      // 用户名存在时，开始对比密码
      let newUser = new User() //因为是实例方法，所以要new出对象，才能使用
      await newUser.comparePassword(password,result.password).then((isMatch)=>{
        // 返回对比结果
        ctx.body={code:200,message:isMatch}
      })
      .catch(error=>{
        // 出现异常，返回异常
        console.log(error)
        ctx.body={code:500,message:error}
      })

    }else{
      ctx.body={
        code:200,
        message:'用户名不存在'
      }
    }
  }).catch(error=>{
    console.log(error)
    ctx.body={code:500,message:error}
  })
})

module.exports= router;
